package cn.gorit.mapper.user;

import cn.gorit.dto.user.RegDto;
import cn.gorit.dto.user.UserDto;
import cn.gorit.entity.user.User;
import cn.gorit.utils.Page;
import org.springframework.stereotype.Repository;

import java.lang.Integer;
import java.util.List;

/**
 * @Classname UserMapper
 * @Description 前台用户的 API
 * @Date 2021/3/6 0:41
 * @Created by CodingGorit
 * @Version 1.0
 */
@Repository
public interface UserMapper {

    /**
     * 前台用户根据用户名查询，也可以作为 ajax 校验时的信息查验，同时也可以作为用户登录时的凭据
     * @param username
     * @return
     */
    UserDto getByUsername(String username);

    /**
     * 前台用户注册的接口
     * @param user
     * @return 返回插入成功的條条数
     */
    Integer save(RegDto user);

    /**
     * 前台用户查询自己信息的接口
     * @param id
     */
    User getInfoById(String id);

    /**
     * 前台用户更新自己信息的接口
     * @param user
     */
    void update(User user);



    // 用户登出的接口 sa-token 直接退出即可

    /**
     * 根據 ID 用户注销的接口，谨慎操作
     * @param id
     */
    void deleteById(String id);

    /**
     * 后台分页查询
     * @param page
     * @return List<User>
     */
    List<User> getByPage(Page<User> page);

    /**
     * 后台查询总数
     * @param page
     * @return int
     */
    int getCountByPage(Page<User> page);

    /**
     * 后台根据id列表查询，后台可以做密码初始化的工作，service 处理
     * @param userIds
     * @return List<User>
     */
//    List<User> getByIds(List<String> userIds);

    /**
     * 用户的登录的时候会处理
     * 修改用户的 status 状态，后台同步处理的，前台不会有变化，使用线程开启，关闭
     * 管理员冻结用户的账户，当用户出现违法行为什么的，有权冻结
     * @param userId
     * @param deleted
     **/
    Integer freezeUser(String userId,Integer deleted);
}
